package com.alibaba.citrus.ots.sales.plan.sdo;

import com.alibaba.citrus.ots.sales.plan.CustomLockKey;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Optional;

/**
 * @author yuhailin
 * @description:
 * @date 2021-09-06 16:43
 */
@Data
public class SalesPlanSDO implements CustomLockKey, Serializable {

    private static final long serialVersionUID = 6592983563178178314L;

    /**
     * ID
     */
    private Long id;

    /**
     * 公司
     */
    private String company;

    /**
     * 组织业务单位编码
     */
    private String orgBusinessUnitCode;

    /**
     * model =1 创建月度计划
     * model =2 创建月度计划调整任务
     */
    private Integer model;

    /**
     * model =2 时必填，月度计划ID
     */
    private Integer parentId;

    /**
     * 计划月度
     */
    private String planTime;

    /**
     * 开始时间
     */
    private Date startTime;

    /**
     * 结束时间
     */
    private Date endTime;

    /**
     * 通知内容
     */
    private String planNotice;

    /**
     * 状态
     */
    private Integer status;

    /**
     * 审批状态
     */
    private Integer checkStatus;

    /**
     * 审批状态名称
     */
    private String auditStatusName;

    /**
     * 审批状态
     */
    private Integer auditStatus;

    /**
     * 提报状态
     */
    private Integer reportStatus;

    /**
     * 提报状态名称
     */
    private String reportStatusName;

    /**
     * 提报单id
     */
    private String reportOrderId;

    /**
     * 是否允许编辑明细
     */
    private Boolean isAllowEdit;

    /**
     * 接口同步状态
     */
    private Integer syncInterface;

    /**
     * 预估价格折扣率
     */
    private BigDecimal estimateDiscount;

    /**
     * 上旬均衡比例
     */
    private BigDecimal monthFirstProprtion;

    /**
     * 中旬均衡比例
     */
    private BigDecimal monthMiddleProprtion;

    /**
     * 下旬均衡比例
     */
    private BigDecimal monthLastProprtion;

    /**
     * 调整上旬
     */
    private Boolean monthFirst;

    /**
     * 调整中旬
     */
    private Boolean monthMiddle;

    /**
     * 调整下旬
     */
    private Boolean monthLast;

    private String url;

    /**
     * 版本号
     */
    private Integer version;

    /**
     * 扩展信息
     */
    private String features;

    /**
     * 租户ID
     */
    private String tenantId;

    /**
     * 创建人
     */
    private String creator;

    /**
     * 修改人
     */
    private String updater;

    /**
     * 创建时间
     */
    private Date gmtCreate;

    /**
     * 修改时间
     */
    private Date gmtModified;

    //start
    /**
     * 是否显示编辑
     */
    private Boolean isEdit;

    /**
     * 是否显示发布
     */
    private Boolean isPublish;

    /**
     * 是否显示调整
     */
    private Boolean isAdjust;

    /**
     * 状态名称
     */
    private String statusDesc;

    /*
     *计划月度
     *
     */
    private String formatPlanTime;

    /**
     * 组织业务单位名称
     */
    private String orgBusinessUnitName;

    private Object statusInfo;

    /**
     * 是否显示审批处理
     */
    private Boolean isAudit;

    private String reportId;

    private String lockPlanTime;
    //end

    @Override
    public String getCustomLockCondition() {
        return Optional.ofNullable(id).map(String::valueOf).orElse(orgBusinessUnitCode + "_" + lockPlanTime  + "_" + model);
    }
}
